

//chequear en donde se pide la busqueda para que se base en el piso, y no en la posici�n exacta
/**
 *
 * @author karenAndy
 */
public class Parqueo {
	//Cantidad de pisos que tendr� el parqueo, cada piso puede tener un m�ximo de 10 espacios de parqueo
	private final int pisos=2;
	
	ParquearStack<Automovil>[] miParqueo;
	
	ParquearStack<Automovil> temp;
	
        /**
         *
         */
        public Parqueo(){
		ParquearStack<Automovil>[] parquearStacks = new ParquearStack[pisos];
		miParqueo = parquearStacks;
		temp = new ParquearStack<Automovil>(0);
		for(int index=0; index<miParqueo.length; index++)
			miParqueo[index] = new ParquearStack<Automovil>(index);
	}
	
        /**
         *
         * @param pisoBuscado
         * @throws ParqueoVacioException
         */
        public void MostrarTop(int pisoBuscado) throws ParqueoVacioException{
		if(miParqueo[pisoBuscado].Empty())
			throw new ParqueoVacioException("El parqueo est� vac�o");
		else
			System.out.println("\nEl auto est� en el piso " +(pisoBuscado+1)+ " tiene placa: " + miParqueo[pisoBuscado-1].Peek()+"\n");
	}
	
        /**
         * 
         * @param placa
         * @throws ParqueoLlenoException
         */
        public void ParquearAuto(String placa) throws ParqueoLlenoException{
		int index=0;
		if(index == pisos){
			throw new ParqueoLlenoException("El parqueo est� lleno, espere a que salga un autom�vil");
		}
		else{
			//Poner un while para q se llene el 1er piso primero si no no puedo probar la pila
			miParqueo[index].Push(placa);
			index++;
		}
	}
	
        /**
         *
         * @param placa
         * @param pisoBuscado
         * @throws ParqueoVacioException
         * @throws NoEncontradoException
         * @throws Exception
         */
        public void SacarAuto(String placa, int pisoBuscado)throws ParqueoVacioException, NoEncontradoException, Exception{
		int aColocar;
		if(miParqueo[pisoBuscado-1].Empty())
			throw new ParqueoVacioException("El parqueo est� vac�o");
		if(miParqueo[pisoBuscado-1].BuscarAuto(placa)==-1){
			throw new NoEncontradoException("El autom�vil que busca no fue encontrado, se le aplicar� una penalizaci�n");
		}
		else{
			while(!(miParqueo[pisoBuscado-1].Peek().equals(placa))){
				temp.Push(miParqueo[pisoBuscado-1].Pop());
			}
			miParqueo[pisoBuscado-1].Pop();
				
			aColocar = temp.getEspaciosOcupados();
				
			for(int tempColocar=0; tempColocar<aColocar; tempColocar++){
				miParqueo[pisoBuscado-1].Push(temp.Pop());
			}
		}		
	}
	
    @Override
	public String toString(){
		String Mostrar="";
		for(int i=0; i<pisos; i++){
			Mostrar += ("\t"+miParqueo[i].toString()+"\n");
		}
		return Mostrar;
	}
	
        /**
         *
         * @return
         */
        public int getPiso(){
		return pisos;
	}
}
